iap_purchase_details(product_id, ds_map);
参数 | 描述 |
---|---|
product_id | 购买的产品 ID 字符串。 |
ds_map | 将存储购买信息的 ds_map。 |
返回: N/A(无返回值)
使用此函数,你可以使用描述给定产品的购买详细信息的多个键 / 值对填充先前创建的 ds_map。映射中返回以下数据:
- "product" - 产品 ID 字符串。
- "order" - 可用的唯一订单 ID(并非所有商店都支持)。
- "token" - 购买标记字符串(如果可用)(并非所有商店都支持此标记)。
- "payload" - 目标商店返回的 payload(如果可用)(并非所有购买都需要此功能,并非所有商店都支持此功能)。
- "receipt" - 收据字符串,如果可用(并非所有商店都支持)。
- "response" - (实数)响应值(如果可用),基于 Google Play 的响应值(有关详细信息,请参阅 此处)。
映射还将包含另一个键 “status”,可用于检查购买的当前状态。此键将具有以下常量之一作为其值:
常量 | 描述 |
---|---|
iap_available | 产品可用或游戏正在等待购买结果。 |
iap_failed | 购买尝试失败。 |
iap_purchased | 该产品已成功购买。 |
iap_canceled | 用户取消了购买。 |
iap_refunded | 购买已被取消。 |
以下注释与参考目标商店返回的映射的 “token(令牌)” 和 “receipt(收据)” 键有关:
- 对于Amazon Store,购买 “token” 和 “receip” 条目被视为同一个。
- 对于Google Play,没有 “receipt” 数据,你需要通过返回的 “payload” 验证购买(如果你通过 payload 进行验证,建议你不要使用硬编码值)。GameMaker Studio 2 仍会根据 游戏选项 的 IAP 标签中提供的公钥,验证 Google Play 购买时返回的数据签名。
- 对于Google Play,购买时提供的 “token” 旨在用于消费购买。
- 对于 iOS 和 MacOS 目标商店,存在可用于购买的 “receipt” 数据,但出于开发目的,在 内部 生成相关联的 “token”。
注意:使用的 ds_map 并不是 iap_product_details 函数创建的,这意味着你必须使用适当的函数先创建它并在不使用时再从内存中删除它。
var p_map = ds_map_create();
var p_index = ds_map_find_value(iap_data, "index");
iap_purchase_details(p_index, p_map);
if ds_map_find_value(p_map, "status") == iap_purchased
{
global.Gold += 100000;
}
ds_map_destroy(p_map);
上面的代码将创建一个 ds_map,然后用存储在变量 “p_index” 中的产品 ID 填充用于购买的键 / 值对,该变量是我们从专门在 IAP 事件 中创建的 iap_data ds_map 中获得的。如果 “status” 键返回常量 iap_purchasing,那么它将设置一个全局变量。